return tree;
}
+/* Delete all items of tree [tree] */
-/* Destroy an AVL Tree */
-
-void
-avltree_done(avltree_t *tree)
+int
+avltree_clear(avltree_t *tree)
{
+ int res;
+
AVLTREE_CHECK_HANDLE(tree);
+ res = tree->count;
avltree_save_key(tree, NULL);
- if (tree->count)
+ if (res) {
avltree_node_free(tree, tree->root);
+ /* avltree_node_free doesn't touch 'count' */
+ tree->count = 0;
+ tree->root = NULL;
+ }
+ return res;
+}
+
+/* Destroy an AVL Tree */
+
+void
+avltree_done(avltree_t *tree)
+{
+ avltree_clear(tree);
xfree(tree);
}
/* Destroy an AVL Tree */
void avltree_done(avltree_t *tree);
+/* Delete all items of tree [tree]; returns number of deleted items */
+int avltree_clear(avltree_t *tree);
+
/* Get number of items in tree */
int avltree_count(const avltree_t *tree);